因为大量使用tomcat作为应用服务,所以,这两天催生了一个想法,通过zabbix监控tomcat的运行状态,从而能够更快的发现tomcat服务出现的问题以及判断问题出现在哪块。
        首先,zabbix监控tomcat等这一类java平台的应用不是直接通过agentd来实现的,而是使用jmx来获取到tomcat这类应用的状态,然后再将数据交给server端,生成监控图。
        如果需要用到jmx监控的话需要在客户端和服务端都安装java环境,至于java环境可以通过源码安装,不过我这里为了省事,直接通过yum安装java和java-devel这两个包:
| 1
 | yum -y install java java-devel
 | 
        然后是服务端的配置:
        服务端需要重新安装zabbix服务端,需要将–enable-java添加到编译参数中去,参数如下所示:
| 1
 | ./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
 | 
        安装好服务端之后可以在软件安装目录找到如下这个目录:
| 1 2 3 4
 | [root@test1 zabbix_java] /usr/local/zabbix/sbin/zabbix_java [root@test1 zabbix_java] bin lib settings.sh shutdown.sh startup.sh
 | 
        修改settings.sh中得参数,其中大部分都是以#开头的,修改的参数如下面所示:
| 1 2 3 4 5
 | [root@test1 zabbix_java] LISTEN_IP="0.0.0.0" LISTEN_PORT=10052 PID_FILE="/tmp/zabbix_java.pid" START_POLLERS=5
 | 
        然后修改zabbix_server.conf的配置,修改的参数如下面所示:
| 1 2 3 4 5 6 7 8 9
 | [root@test1 zabbix_java] LogFile=/tmp/zabbix_server.log DBName=zabbix DBUser=zabbix DBPassword=xxxxxx DBSocket=/tmp/mysql.sock JavaGateway=127.0.0.1 JavaGatewayPort=10052 StartJavaPollers=5
 | 
        其中上面的5行和以前配置一样,下面的三行是需要将前面的#删掉,并进行修改的。
        修改完以后,重启zabbixserver并且启动zabbix_java_Gateway启动    zabbix_java_Gateway的方法为
| 1
 | sh /usr/local/zabbix/sbin/zabbix_java/startup.sh
 | 
        启动之后,在服务端会多出一个侦听端口10052来,效果如下:
| 1 2 3
 | [root@test1 zabbix_java] tcp6 0 0 :::10052 :::* LISTEN 15371/java  tcp6 0 0 127.0.0.1:10052 127.0.0.1:38661 TIME_WAIT
 | 
        看到上面这些信息,证明服务端已经配置好了,接下来需要配置tomcat客户端了。
        tomcat客户端的配置为如下:
        首先安装java环境
        也和上面一样使用yum安装:
| 1
 | yum -y install java java-devel
 | 
        然后下载tomcat的源码包,解压后放在相应的目录,我这里放在/usrlocal/tomcat-    8.0.26/目录下。
        然后需要下载对应tomcat的jmx版本,这里安装的是最新的tomcat,版本是8.0.26,于是下载路径为如下:
| 1
 | wget http://archive.apache.org/dist/tomcat/tomcat-	8/v8.0.26/bin/extras/catalina-jmx-remote.jar
 | 
        使用其他版本的可以自行选择相对应的jmx版本下载。
        下载后将该文件放在tomcat的lib目录下,然后修改catalina.sh文件,catalina.sh文件在tomcat的bin目录下。在#!bin/sh下方添加一行参数,如下所示:
| 1 2
 | #!/bin/sh CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.6.0.176"
 | 
        其中的10.6.0.176是该tomcat客户端的IP。然后需要修改服务器的配置文件server.xml:
| 1 2 3 4 5 6
 | [root@test3 tomcat-8.0.26] <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="8090" rmiServerPortPlatform="8090" />  </Host>  </Engine>  </Service> </Server>
 | 
        如上面所示,第一行就是我们添加进去的配置,其中的8090就是zabbix server端监控tomcat需要使用的端口。
        保存之后退出,然后启动tomcat和zabbix的agentd。
        启动完成之后通过ps命令和netstat命令查看是否正常的侦听了相应的端口,zabbix_agentd默认侦听10050端口,tomcat默认侦听8080端口,8090端口是开给jmx使用    的,应该也是开启的,效果如下:
| 1 2 3 4 5 6 7 8 9 10
 | [root@test3 tomcat-8.0.26] tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 19592/./sbin/zabbix  tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 836/sshd  tcp6 0 0 ::1:25 :::* LISTEN 1503/master  tcp6 0 0 :::8090 :::* LISTEN 21026/java  tcp6 0 0 127.0.0.1:8005 :::* LISTEN 21026/java  tcp6 0 0 :::8009 :::* LISTEN 21026/java  tcp6 0 0 :::8080 :::* LISTEN 21026/java  tcp6 0 0 :::40438 :::* LISTEN 21026/java  tcp6 0 0 :::22 :::* LISTEN 836/sshd
 | 
        这时候可以在zabbix_server端尝试获取tomcat的相关数据了。这时候需要使用到一个工具cmdline-jmxclient-0.10.3.jar
        这个工具可以自己到网上下载,我的附件中也会有这个工具,使用方法为如下:
| 1 2 3 4 5 6
 | [root@test1 zabbix_java] 09/09/2015 17:56:49 +0800 org.archive.jmx.Client NonHeapMemoryUsage:  committed: 24313856 init: 24313856 max: 224395264 used: 20066808
 | 
        上面已经获取到了相应的tomcat数据,好了,到这里配置就差不多要大功告成了,但是还需要在web端配置相应的模版,刚开始我使用系统自带的模板,发现出不来数据,于是我去网上找到了某个网友自己做的模板,终于可以获取到tomcat的数据了,模板我也将一并打包放在附件中。
        好了,在web端开始配置了,配置如下图所示:

        其中的端口需要填写两个,第一个是agentd的侦听端口,第二个是jmx的侦听端口,这个端口8090是我们在tomcat客户端的server.xml文件中定义的。
        将该主机关联到相应的模板上去:

        之后就等待出数据了,该模板中的某些键值在tomcat中不支持,我目前还不知道是什么情况,可能和tomcat中得配置参数有关系吧。下面展示一下出图的效果,这个模板各位也可以拿回去自己进行修改:


